package com.uoko.plugins.umeng.common;

import org.json.JSONObject;

/**
 * @author shaohua
 * Email shaohua@uoko.com
 * created by 2018/5/30
 */
public interface UmengPushSender {
    /**
     * 广播(broadcast): 向安装该App的所有设备发送消息。(android & ios)
     *
     * @param ticker 通知栏提示文字
     * @param title  通知标题
     * @param text   通知的内容
     * @return
     * @throws Exception
     */
    boolean sendAllBroadcast(String ticker, String text, String title) throws Exception;


    /**
     * 广播(broadcast): 向安装该App的所有设备发送消息。
     *
     * @param ticker 通知栏提示文字
     * @param title  通知标题
     * @param text   通知的内容
     * @return
     * @throws Exception
     */
    boolean sendAndroidBroadcast(String ticker, String title, String text) throws Exception;

    /**
     * Unicast<单播> </>向指定的设备发送消息，包括向单个device_token或者单个alias发消息。
     *
     * @param device_token 单个推送，device_token
     * @param ticker       通知栏提示文字
     * @param title        通知标题
     * @param text         通知的内容*
     * @return
     * @throws Exception
     */
    boolean sendAndroidUnicast(String device_token, String ticker, String title, String text, JSONObject message) throws Exception;

    /**
     * 向满足特定条件的设备集合发送消息，
     * 例如: "特定版本"、"特定地域"等。
     * 友盟消息推送所支持的维度筛选和友盟统计分析所提供的数据展示维度是一致的，后台数据也是打通的
     *
     * @return
     * @throws Exception
     */
    boolean sendAndroidGroupcast(String ticker, String title, String text) throws Exception;

    /**
     * 自定义播(customizedcast): 开发者通过自有的alias进行推送,
     * 可以针对单个或者一批alias进行推送，也可以将alias存放到文件进行发送。
     *
     * @param alias_type 当type=customizedcast时，必填，
     *                   alias的类型,alias_type可由开发者自定义,
     *                   开发者在SDK中,调用setAlias(alias, alias_type)时所设置的alias_type
     * @param ticker     通知栏提示文字
     * @param title      通知标题
     * @param text       通知的内容
     * @return
     * @throws Exception
     */
    boolean sendAndroidCustomizedcast(String alias_type, String ticker, String title, String text) throws Exception;

    /**
     * @param alias_type
     * @param ticker     通知栏提示文字
     * @param title      通知标题
     * @param text       通知的内容
     * @return
     * @throws Exception
     */
    boolean sendAndroidCustomizedcastFile(String alias_type, String ticker, String title, String text) throws Exception;

    /**
     * @param ticker
     * @param title
     * @param text
     * @return
     * @throws Exception
     */
    boolean sendAndroidFilecast(String ticker, String title, String text) throws Exception;

    /**
     * ios 发送广播
     *
     * @param ticker
     * @param text
     * @return
     * @throws Exception
     */
    boolean sendIOSBroadcast(String ticker, String text) throws Exception;

    /**
     * ios 发送广播单个
     *
     * @param device_token
     * @param ticker
     * @param text
     * @param message
     * @return
     * @throws Exception
     */
    boolean sendIOSUnicast(String device_token, String ticker, String text, String message) throws Exception;


    /**
     * ios群推
     *
     * @return
     * @throws Exception
     */
    boolean sendIOSGroupcast() throws Exception;

    /**
     * 自定义播(customizedcast): 开发者通过自有的alias进行推送,
     * 可以针对单个或者一批alias进行推送，也可以将alias存放到文件进行发送。
     *
     * @param alias_type 当type=customizedcast时，必填，alias的类型,alias_type可由开发者自定义,开发者在SDK中,调用setAlias(alias, alias_type)时所设置的alias_type
     * @param ticker     通知栏提示文字
     * @param text       通知的内容
     * @return
     * @throws Exception
     */
    boolean sendIOSCustomizedcast(String alias_type, String ticker, String text) throws Exception;

    /**
     * 文件推送，先上传文件然后在进行推送
     *
     * @param ticker
     * @return
     * @throws Exception
     */
    boolean sendIOSFilecast(String ticker) throws Exception;
}
